스트림 암호와 RC4

스트림 암호와 RC4

연속적 처리 방식의 암호화 — 의사 난수 키스트림 생성

스트림 암호

블록 암호 대비 특징

설계 고려사항

조건 이유
암호화 시퀀스 주기가 커야 함 주기 짧으면 패턴 반복 노출
키스트림이 난수 속성과 유사 예측 불가능성 확보
충분한 키 길이 전수공격 방지

RC4 (Rivest Cipher 4)

S 배열 초기화

# 초기화 (256바이트 배열)
for i = 0 to 255:
    S[i] = i                     # 0~255으로 초기화
    T[i] = key[i mod KeyLen]     # 키로 T 초기화

j = 0
# S 배열 섞기
for i = 0 to 255:
    j = (j + S[i] + T[i]) mod 256
    Swap(S[i], S[j])

키스트림 생성

i = j = 0
for each plaintext byte:
    i = (i + 1) mod 256
    j = (j + S[i]) mod 256
    Swap(S[i], S[j])

    t = (S[i] + S[j]) mod 256
    keystreamByte = S[t]
    output = plaintext XOR keystreamByte

동작 원리

  1. 비밀키로 256바이트 배열을 무작위하게 섞음
  2. 매 바이트마다 두 포인터(i, j)를 이동하며 t 계산
  3. S[t] 값으로 평문 1바이트씩 XOR → 암호화

CFB 모드와의 관계

블록 암호(AES/DES)를 이용해 스트림 암호처럼 동작 가능

CFB 모드: 블록 암호 → 암호화 출력 → XOR → 스트림 방식 처리
OFB 모드: 피드백 경로가 평문 XOR 이전 → 더 순수한 스트림 구조

관련 개념